set(TARGET_NAME crashpad_snapshot)
set(TARGETS ${TARGETS} ${TARGET_NAME} PARENT_SCOPE)

add_library(${TARGET_NAME} STATIC
    annotation_snapshot.cc
    annotation_snapshot.h
    capture_memory.cc
    capture_memory.h
    cpu_architecture.h
    cpu_context.cc
    cpu_context.h
    crashpad_info_client_options.cc
    crashpad_info_client_options.h
    exception_snapshot.h
    handle_snapshot.cc
    handle_snapshot.h
    memory_snapshot.cc
    memory_snapshot.h
    memory_snapshot_generic.h
    minidump/exception_snapshot_minidump.cc
    minidump/exception_snapshot_minidump.h
    minidump/memory_snapshot_minidump.cc
    minidump/memory_snapshot_minidump.h
    minidump/minidump_annotation_reader.cc
    minidump/minidump_annotation_reader.h
    minidump/minidump_context_converter.cc
    minidump/minidump_context_converter.h
    minidump/minidump_simple_string_dictionary_reader.cc
    minidump/minidump_simple_string_dictionary_reader.h
    minidump/minidump_stream.h
    minidump/minidump_string_list_reader.cc
    minidump/minidump_string_list_reader.h
    minidump/minidump_string_reader.cc
    minidump/minidump_string_reader.h
    minidump/module_snapshot_minidump.cc
    minidump/module_snapshot_minidump.h
    minidump/process_snapshot_minidump.cc
    minidump/process_snapshot_minidump.h
    minidump/system_snapshot_minidump.cc
    minidump/system_snapshot_minidump.h
    minidump/thread_snapshot_minidump.cc
    minidump/thread_snapshot_minidump.h
    module_snapshot.h
    process_snapshot.h
    snapshot_constants.h
    system_snapshot.h
    thread_snapshot.h
    unloaded_module_snapshot.cc
    unloaded_module_snapshot.h
)


if(APPLE)
    target_sources(${TARGET_NAME} PRIVATE
        posix/timezone.cc
        posix/timezone.h
        mac/cpu_context_mac.cc
        mac/cpu_context_mac.h
        mac/exception_snapshot_mac.cc
        mac/exception_snapshot_mac.h
        mac/mach_o_image_annotations_reader.cc
        mac/mach_o_image_annotations_reader.h
        mac/mach_o_image_reader.cc
        mac/mach_o_image_reader.h
        mac/mach_o_image_segment_reader.cc
        mac/mach_o_image_segment_reader.h
        mac/mach_o_image_symbol_table_reader.cc
        mac/mach_o_image_symbol_table_reader.h
        mac/module_snapshot_mac.cc
        mac/module_snapshot_mac.h
        mac/process_reader_mac.cc
        mac/process_reader_mac.h
        mac/process_snapshot_mac.cc
        mac/process_snapshot_mac.h
        mac/process_types.cc
        mac/process_types.h
        mac/process_types/custom.cc
        mac/process_types/flavors.h
        mac/process_types/internal.h
        mac/process_types/traits.h
        mac/system_snapshot_mac.cc
        mac/system_snapshot_mac.h
        mac/thread_snapshot_mac.cc
        mac/thread_snapshot_mac.h
    )
else()
    target_sources(${TARGET_NAME} PRIVATE
        crashpad_types/crashpad_info_reader.cc
        crashpad_types/crashpad_info_reader.h
    )
endif()

if(LINUX OR ANDROID)
    target_sources(${TARGET_NAME} PRIVATE
        posix/timezone.cc
        posix/timezone.h
        linux/cpu_context_linux.cc
        linux/cpu_context_linux.h
        linux/debug_rendezvous.cc
        linux/debug_rendezvous.h
        linux/exception_snapshot_linux.cc
        linux/exception_snapshot_linux.h
        linux/process_reader_linux.cc
        linux/process_reader_linux.h
        linux/process_snapshot_linux.cc
        linux/process_snapshot_linux.h
        linux/signal_context.h
        linux/system_snapshot_linux.cc
        linux/system_snapshot_linux.h
        linux/thread_snapshot_linux.cc
        linux/thread_snapshot_linux.h
        sanitized/memory_snapshot_sanitized.cc
        sanitized/memory_snapshot_sanitized.h
        sanitized/module_snapshot_sanitized.cc
        sanitized/module_snapshot_sanitized.h
        sanitized/process_snapshot_sanitized.cc
        sanitized/process_snapshot_sanitized.h
        sanitized/sanitization_information.cc
        sanitized/sanitization_information.h
        sanitized/thread_snapshot_sanitized.cc
        sanitized/thread_snapshot_sanitized.h
        crashpad_types/image_annotation_reader.cc
        crashpad_types/image_annotation_reader.h
        elf/elf_dynamic_array_reader.cc
        elf/elf_dynamic_array_reader.h
        elf/elf_image_reader.cc
        elf/elf_image_reader.h
        elf/elf_symbol_table_reader.cc
        elf/elf_symbol_table_reader.h
        elf/module_snapshot_elf.cc
        elf/module_snapshot_elf.h
    )
endif()

if(WIN32)
    target_sources(${TARGET_NAME} PRIVATE
        win/capture_memory_delegate_win.cc
        win/capture_memory_delegate_win.h
        win/cpu_context_win.cc
        win/cpu_context_win.h
        win/exception_snapshot_win.cc
        win/exception_snapshot_win.h
        win/memory_map_region_snapshot_win.cc
        win/memory_map_region_snapshot_win.h
        win/module_snapshot_win.cc
        win/module_snapshot_win.h
        win/pe_image_annotations_reader.cc
        win/pe_image_annotations_reader.h
        win/pe_image_reader.cc
        win/pe_image_reader.h
        win/pe_image_resource_reader.cc
        win/pe_image_resource_reader.h
        win/process_reader_win.cc
        win/process_reader_win.h
        win/process_snapshot_win.cc
        win/process_snapshot_win.h
        win/process_subrange_reader.cc
        win/process_subrange_reader.h
        win/system_snapshot_win.cc
        win/system_snapshot_win.h
        win/thread_snapshot_win.cc
        win/thread_snapshot_win.h
    )
endif()

if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(x86)|(i[3-7]86)")
    target_sources(${TARGET_NAME} PRIVATE
        x86/cpuid_reader.cc
        x86/cpuid_reader.h
    )
endif()

target_include_directories(${TARGET_NAME} INTERFACE
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
)
target_link_libraries(${TARGET_NAME}
    PRIVATE
        $<BUILD_INTERFACE:crashpad_interface>
    PUBLIC
        crashpad_client
        crashpad_compat
        crashpad_util
        ${MINICHROMIUM_LIBRARIES}
)

if(WIN32)
    target_link_libraries(${TARGET_NAME} PRIVATE powrprof)
    if(MSVC)
        target_compile_options(${TARGET_NAME} PRIVATE "/wd4201")
    endif()
    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        target_compile_options(${TARGET_NAME} PRIVATE 
            "-Wno-multichar"
            "-Wno-attributes"
        )
    elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    target_compile_options(${TARGET_NAME} PRIVATE 
        "-Wno-unknown-attributes"
    )
    endif()
endif()

set_property(TARGET ${TARGET_NAME} PROPERTY EXPORT_NAME snapshot)
add_library(crashpad::snapshot ALIAS ${TARGET_NAME})

crashpad_install_target(${TARGET_NAME})
